/*
 * Dateiname: %name: DataAccessHelper.java% 
 * Version  : %version: 1.0% 
 * Datum    : %date_created: 21.06.2009% 
 * Erstellt durch LAGERPLAN Otganisation
 */
package com.lagerplan.basisdienste.util.persistence;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

/**
 * <p>
 * Title: DataAccessHelper.java<br>
 * Description: Basismethoden Data Access Object<br>
 * Copyright: Copyright (c) 2009<br>
 * Company: LAGERPLAN Organisation
 * </p>
 * 
 * @author %author: Michael Felber%
 * @version %version: 1%
 */
public class DataAccessHelper {

	/**
	 * Liest einen int-Wert vom ResultSet als ein Integer object.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return Integer der gelesene Wert
	 * 
	 * @see #setInteger
	 */
	public static Integer getInteger(ResultSet rs, String pos) throws SQLException {
		int i = rs.getInt(pos);
		return rs.wasNull() ? null : new Integer(i);
	}

	/**
	 * Setzt ein Integer Objekt ins PreparedStatement als ein int oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param i das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 * @see #getInteger
	 */
	public static void setInteger(PreparedStatement ps, int pos, Integer i) throws SQLException {
		if (i == null) {
			ps.setNull(pos, Types.INTEGER);
		} else {
			ps.setInt(pos, i.intValue());
		}
	}

	/**
	 * Liest einen float-Wert vom ResultSet als ein Float Objekt.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return Float der gelesene Wert
	 * 
	 * @see #setFloat
	 */
	public static Float getFloat(ResultSet rs, String pos) throws SQLException {
		float f = rs.getFloat(pos);
		return rs.wasNull() ? null : new Float(f);
	}

	/**
	 * Setzt ein Float Objekt ins PreparedStatement als ein float oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param f das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 * @see #getFloat
	 */
	public static void setFloat(PreparedStatement ps, int pos, Float f) throws SQLException {
		if (f == null) {
			ps.setNull(pos, Types.FLOAT);
		} else {
			ps.setFloat(pos, f.floatValue());
		}
	}

	/**
	 * Setzt ein String Objekt ins PreparedStatement als String oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param s das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 * @see #getString
	 */
	public static void setString(PreparedStatement ps, int pos, String s) throws SQLException {
		if (s == null) {
			ps.setNull(pos, Types.VARCHAR);
		} else {
			ps.setString(pos, s);
		}
	}

	/**
	 * Setzt ein Character Objekt ins PreparedStatement als String oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param s das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 */
	public static void setString(PreparedStatement ps, int pos, Character c) throws SQLException {
		if (c == null) {
			ps.setNull(pos, Types.VARCHAR);
		} else {
			ps.setString(pos, c.toString());
		}
	}

	/**
	 * Liest einen String-Wert vom ResultSet.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return String der gelesene Wert
	 * 
	 * @see #setString
	 */
	public static String getString(ResultSet rs, String pos) throws SQLException {
		String s = rs.getString(pos);
		return rs.wasNull() ? null : s;
	}

	/**
	 * Liest einen double-Wert vom ResultSet als ein Double Objekt.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return Double der gelesene Wert
	 * 
	 * @see #setDouble
	 */
	public static Double getDouble(ResultSet rs, String pos) throws SQLException {
		double d = rs.getDouble(pos);
		return rs.wasNull() ? null : new Double(d);
	}

	/**
	 * Setzt ein Double Objekt ins PreparedStatement als ein double oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param d das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 * @see #getDouble
	 */
	public static void setDouble(PreparedStatement ps, int pos, Double d) throws SQLException {
		if (d == null) {
			ps.setNull(pos, Types.DOUBLE);
		} else {
			ps.setDouble(pos, d.doubleValue());
		}
	}

	/**
	 * Liest einen long-Wert vom ResultSet als ein Long Objekt.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return Long der gelesene Wert
	 * 
	 * @see #setLong
	 */
	public static Long getLong(ResultSet rs, String pos) throws SQLException {
		long l = rs.getLong(pos);
		return rs.wasNull() ? null : new Long(l);
	}

	/**
	 * Setzt ein Long Objekt ins PreparedStatement als ein long oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param l das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * 
	 * @see #getLong
	 */
	public static void setLong(PreparedStatement ps, int pos, Long l) throws SQLException {
		if (l == null) {
			ps.setNull(pos, Types.BIGINT);
		} else {
			ps.setLong(pos, l.longValue());
		}
	}

	/**
	 * Liest einen boolean Wert vom ResultSet als ein Boolean Objekt.
	 * 
	 * @param rs das ResultSet
	 * @param pos die Position des Parameters
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 * @return Boolean der gelesene Wert
	 */
	public static Boolean getBoolean(ResultSet rs, String pos) throws SQLException {
		boolean b = rs.getBoolean(pos);
		return rs.wasNull() ? null : Boolean.valueOf(b);
	}

	/**
	 * Setzt ein Date Objekt ins PreparedStatement als ein Date oder als null.
	 * 
	 * @param ps das PreparedStatement
	 * @param pos die Position des Parameters
	 * @param d das einzusetzende Objekt
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 */
	public static void setDate(PreparedStatement ps, int pos, java.util.Date d) throws SQLException {
		if (d == null) {
			ps.setNull(pos, Types.DATE);
		} else {
			ps.setDate(pos, new java.sql.Date(d.getTime()));
		}
	}

	/**
	 * Setzt ein Timestamp Objekt ins PreparedStatement
	 * 
	 * @throws SQLException Fehler beim Zugriff auf die Datenbank
	 */
	public static void setTimestamp(PreparedStatement preparedStatement, int pos, java.sql.Timestamp timestamp) throws SQLException {
		if (timestamp == null)
			preparedStatement.setNull(pos, Types.TIMESTAMP);
		else
			preparedStatement.setTimestamp(pos, timestamp);

	}

}
